package Thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

//使用Callable任务类，进行指定任务；（此任务执行完毕后会有返回值）；
//此任务返回的对象通过FuTureTask类获取该任务返回的对象，这样就可以交给一个线程进行任务的完成；
//关于：为什么不把这个任务直接交给一个线程进行处理呢？？？
//因为线程内部没有进行实现相关任务类带有返回值的构造方法的实现。
// 所以不能进行直接进行接收，只能通过我们现将这个任务类返回的对象交给这个类进行做中间桥梁进行完成；
public class Demo40 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Callable<Integer> callable=new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                int result=0;
                for(int i=0;i<100;i++){
                    result+=i;
                }
                return result;
            }
        } ;
        FutureTask<Integer> futureTask=new FutureTask<>(callable);
        Thread thread=new Thread(futureTask);
        thread.start();
        System.out.println("result="+futureTask.get());
        //此个体get方法是进行获取furtruretask类的返回值，
        // 这个返回值来源于：Callable得call方法；
        //get方法的执行时间：这个线程执行完毕后就获取到值；
        //当线程没有执行完毕后就会阻塞等待，等到线程的执行完毕；
    }
}
